package com.zyl.blog.common.domain.task.bean;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.common.domain.task.bean
 * @ClassName: taskInfo
 * @Description: 任务信息实体类
 * @Author FinalFantasy
 * @Date 2025/8/12-10:08
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("task_info")
public class TaskInfo {
    /**
     * 任务记录唯一标识符，自增主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @JsonProperty("id")
    private Long id;

    /**
     * 任务名称，与任务类中getTaskName()返回值一致
     */
    @TableField("task_name")
    @JsonProperty("taskName")
    private String taskName;

    /**
     * 任务描述信息，说明任务的用途和功能
     */
    @TableField("task_description")
    @JsonProperty("taskDescription")
    private String taskDescription;

    /**
     * 调度类型：CRON( cron表达式调度)、FIXED_RATE(固定速率调度)、FIXED_DELAY(固定延迟调度)
     */
    @TableField("schedule_type")
    @JsonProperty("scheduleType")
    private String scheduleType;

    /**
     * cron表达式，仅当schedule_type为CRON时有效
     */
    @TableField("cron_expression")
    @JsonProperty("cronExpression")
    private String cronExpression;

    /**
     * 时间间隔，仅当schedule_type为FIXED_RATE或FIXED_DELAY时有效
     */
    @TableField("task_interval")
    @JsonProperty("taskInterval")
    private Long taskInterval;

    /**
     * 时间单位，对应java.time.temporal.ChronoUnit枚举，如SECONDS、MINUTES等
     */
    @TableField("time_unit")
    @JsonProperty("timeUnit")
    private String timeUnit;

    /**
     * 任务所属用户名，用于多用户隔离
     */
    @TableField("username")
    @JsonProperty("username")
    private String username;

    /**
     * 任务类的全限定名，用于反射重建任务实例
     */
    @TableField("task_class_name")
    @JsonProperty("taskClassName")
    private String taskClassName;

    /**
     * 任务激活状态：0-未激活，1-已激活（运行中）
     */
    @TableField("is_active")
    @JsonProperty("isActive")
    private Integer isActive;

    /**
     * 辑删除标记：0-未删除，1-已删除
     */
    @TableField("is_deleted")
    @TableLogic
    @JsonProperty(value = "isDeleted", access = JsonProperty.Access.READ_ONLY)
    private Integer isDeleted;

    /**
     * 任务删除时间，软删除时自动记录
     */
    @TableField(value = "delete_time")
    @JsonProperty(value = "createTime", access =  JsonProperty.Access.READ_ONLY)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime deleteTime;

    /**
     * 任务创建时间，首次注册时自动记录
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonProperty(value = "createTime", access =  JsonProperty.Access.READ_ONLY)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 任务信息最后更新时间，状态变更时自动更新
     */
    @TableField(value = "update_time", fill =  FieldFill.INSERT_UPDATE)
    @JsonProperty(value = "updateTime", access =   JsonProperty.Access.READ_ONLY)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

}
